﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Maestro
{
    public partial class Sucursal : Form
    {
        public Sucursal()
        {
            InitializeComponent();
        }

        private void Sucursal_Load(object sender, EventArgs e)
        {
            ListarEmpresa();
        }

        private void ListarEmpresa()
        {
            LogicaNegocio.EmpresaBLL empresaBLL = new LogicaNegocio.EmpresaBLL();
            cmbEmpresa.DataSource = empresaBLL.Listar();
            cmbEmpresa.ValueMember = "ID";
            cmbEmpresa.DisplayMember = "NOMBREEMPRESA";
            cmbEmpresa.SelectedIndex = -1;
        }

        private void ListarSucursal(AccesoDatos.EMPRESA selectedEmpresa)
        {
            LogicaNegocio.SucursalBLL sucursalBLL = new LogicaNegocio.SucursalBLL();
            gridInfoRegistrada.DataSource = sucursalBLL.Listar(selectedEmpresa);
            gridInfoRegistrada.ClearSelection();
            gridInfoRegistrada.CurrentCell = null;
        }

        private void LimpiarFormulario()
        {
            this.ListarEmpresa();
            this.LimpiarCampoTexto();
            gridInfoRegistrada.DataSource = null;
        }

        private void LimpiarCampoTexto()
        {
            txtSucursal.ResetText();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (cmbEmpresa.SelectedIndex >= 0)
            {
                LogicaNegocio.SucursalBLL sucursalBLL = new LogicaNegocio.SucursalBLL();
                AccesoDatos.EMPRESA selectedEmpresa = cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA;

                txtSucursal.ResetText();
                gridInfoRegistrada.DataSource = sucursalBLL.Listar(selectedEmpresa);
                gridInfoRegistrada.ClearSelection();
            }
        }

        private void gridInfoRegistrada_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridInfoRegistrada.DataSource != null)
            {
                gridInfoRegistrada.Columns["ID"].Visible = false;
                gridInfoRegistrada.Columns["IDEMPRESA"].Visible = false;
                gridInfoRegistrada.Columns["IDSUCURSAL"].Visible = false;
                gridInfoRegistrada.Columns["CIUDAD"].HeaderText = "Sucursal";
                gridInfoRegistrada.Columns["CIUDAD"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                gridInfoRegistrada.Columns["IDEMPRESAANTIGUO"].Visible = false;
                gridInfoRegistrada.Columns["ELIMINADO"].Visible = false;
                gridInfoRegistrada.Columns["EMPRESA"].Visible = false;
                gridInfoRegistrada.Columns["USUARIO"].Visible = false;
            }
        }

        private void gridInfoRegistrada_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                AccesoDatos.SUCURSAL sucursal = gridInfoRegistrada.Rows[e.RowIndex].DataBoundItem as AccesoDatos.SUCURSAL;

                txtSucursal.Text = sucursal.CIUDAD.Trim();
            }
        }

        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            if (cmbEmpresa.SelectedIndex >= 0)
            {
                if (!string.IsNullOrWhiteSpace(txtSucursal.Text))
                {
                    LogicaNegocio.SucursalBLL sucursalBLL = new LogicaNegocio.SucursalBLL();
                    List<AccesoDatos.SUCURSAL> lista = sucursalBLL.Listar();
                    AccesoDatos.SUCURSAL tipo = lista.Find(x => x.CIUDAD.Trim().Equals(txtSucursal.Text.Trim(), StringComparison.CurrentCultureIgnoreCase));

                    if (tipo == null)
                    {
                        AccesoDatos.SUCURSAL nuevoSucursal = new AccesoDatos.SUCURSAL()
                        {
                            IDEMPRESA = int.Parse(cmbEmpresa.SelectedValue.ToString()),
                            CIUDAD = txtSucursal.Text.Trim(),
                            ELIMINADO = 0
                        };

                        sucursalBLL.Registrar(nuevoSucursal);

                        ListarSucursal((cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA));
                        LimpiarCampoTexto();
                    }
                    else
                    {
                        MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese campo 'Sucursal'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Seleccione la empresa", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                if (cmbEmpresa.SelectedIndex >= 0)
                {
                    if (!string.IsNullOrWhiteSpace(txtSucursal.Text))
                    {
                        AccesoDatos.SUCURSAL selectedSucursal = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.SUCURSAL;
                        LogicaNegocio.SucursalBLL sucursalBLL = new LogicaNegocio.SucursalBLL();

                        if (selectedSucursal.CIUDAD.Trim().Equals(txtSucursal.Text.Trim(), StringComparison.CurrentCultureIgnoreCase))
                        {
                            AccesoDatos.SUCURSAL updSucursal = new AccesoDatos.SUCURSAL()
                            {
                                CIUDAD = txtSucursal.Text.Trim()
                            };

                            sucursalBLL.Actualizar(selectedSucursal, updSucursal);
                            ListarSucursal((cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA));
                            LimpiarCampoTexto();
                        }
                        else
                        {
                            List<AccesoDatos.SUCURSAL> lista = sucursalBLL.Listar();
                            AccesoDatos.SUCURSAL sucursal = lista.Find(x => x.CIUDAD.Trim().Equals(txtSucursal.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && x.ELIMINADO == 0);

                            if (sucursal == null)
                            {
                                AccesoDatos.SUCURSAL updSucursal = new AccesoDatos.SUCURSAL()
                                {
                                    CIUDAD = txtSucursal.Text.Trim()
                                };

                                sucursalBLL.Actualizar(selectedSucursal, updSucursal);
                                ListarSucursal((cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA));
                                LimpiarCampoTexto();
                            }
                            else
                            {
                                MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese campo 'Sucursal'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione la empresa'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                if (cmbEmpresa.SelectedIndex >= 0)
                {
                    DialogResult dr = MessageBox.Show("¿Confirma eliminar la fila seleccionada?", "Sisco", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                    if (dr == DialogResult.Yes)
                    {
                        AccesoDatos.SUCURSAL selectedSucursal = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.SUCURSAL;
                        LogicaNegocio.SucursalBLL sucursalBLL = new LogicaNegocio.SucursalBLL();

                        sucursalBLL.Eliminar(selectedSucursal);
                        ListarSucursal((cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA));
                        LimpiarCampoTexto();
                    } 
                }
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
